#include "SDLParticle.h"

/**
 * @brief Construct a new object
 * 
 */
SDLParticle::SDLParticle()
{
    //初始化坐标
    x = 0;
    y = 0;
    xVel = 0;
    yVel = 0;
    nowFrameIndex = 0.0;
    animPre = 1;
    //初始化速率
    setClips();
    disH = 5;
    disW = 5;
}

/**
 * @brief Destroy the object
 * 
 */
SDLParticle::~SDLParticle()
{
}


/**
 * @brief 将动画的相应帧画在画布上
 * 
 * @param renderer ： 2D渲染上下文
 */
void SDLParticle::show(SDL_Renderer *renderer)
{
    x += xVel;
    y += yVel;
    SDL_Rect dstPos;
    dstPos.x = x;
    dstPos.y = y;
    dstPos.w = disW;
    dstPos.h = disH;
    nowFrameIndex = (float)SDL_GetTicks()/1000*PARTICLE_COUNT*animPre;
    SDL_RenderCopy(renderer, background, &clips[(int)nowFrameIndex%PARTICLE_COUNT], &dstPos);
}


/**
 * @brief 设置每一帧的位置
 * 
 */
void SDLParticle::setClips()
{
    //剪切子图
    for ( int i = 0; i < PARTICLE_COUNT; i++ )
    {
        clips[ i ].x = PARTICLE_HEIGHT * i;
        clips[ i ].y = 0;
        clips[ i ].w = PARTICLE_HEIGHT;
        clips[ i ].h = PARTICLE_WIDTH;
    }
}

/**
 * @brief 设置位置
 * 
 * @param x ： x
 * @param y :  y
 */
void SDLParticle::setPos(int x, int y)
{
    this->x = x;
    this->y = y;
}


/**
 * @brief 设置位置x
 * 
 * @return int : 返回位置x
 */
void SDLParticle::setX(int x)
{
    this->x = x;
}


/**
 * @brief 设置位置y
 * 
 */
void SDLParticle::setY(int y)
{
    this->y = y;
}

/**
 * @brief 设置大小
 * 
 * @param w ： w
 * @param h :  h
 */
void SDLParticle::setSize(int w,  int h)
{
    this->disW = w;
    this->disH = h;
}


/**
 * @brief 获取位置x
 * 
 * @return int : 返回位置x
 */
int SDLParticle::getX()
{
    return this->x;
}



/**
 * @brief 获取位置y
 * 
 * @return int : 返回位置y
 */
int SDLParticle::getY()
{
    return this->y;
}


/**
 * @brief 设置每秒中闪烁周期数
 * 
 * @param animPre ： 每秒闪烁的周期数
 */
void SDLParticle::SetAnimPreSecond(int animPre)
{
    this->animPre = animPre;
}

/**
 * @brief 获取对象当前的位置
 * 
 * @param x ： 返回X位置
 * @param y ： 返回Y位置
 */
void SDLParticle::getPos(int *x, int *y)
{
    *x = this->x;
    *y = this->y;
}


/**
 * @brief 设置移动速度
 * 
 * @param xVel : x轴移动速度
 * @param yVel : y轴移动速度
 */
void SDLParticle::setSpeed(int xVel, int yVel)
{
    this->xVel = xVel;
    this->yVel = yVel;
}